# -*- coding: utf-8 -*-
# @Time    : 2024/7/12 13:33
# @Author  : yujiahao
# @File    : 20_fastapi_form_file.py
# @description:请求表单与文件


from fastapi import FastAPI, File, Form, UploadFile

app = FastAPI()


# todo  FastAPI 支持同时使用 File 和 Form 定义文件和表单字段
@app.post("/files/")
async def create_file(
        file: bytes = File(), fileb: UploadFile = File(), token: str = Form()
):
    '''
    使用方法和之前一样，只不过组合了一下

    警告

        - 可在一个路径操作中声明多个 File 与 Form 参数，但不能同时声明要接收 JSON 的 Body 字段。
        - 因为此时请求体的编码为 multipart/form-data，不是 application/json。
        - 这不是 FastAPI 的问题，而是 HTTP 协议的规定。

    总结：在同一个请求中接收数据和文件时，应同时使用 File 和 Form。

    '''
    return {
        "file_size": len(file),
        "token": token,
        "fileb_content_type": fileb.content_type,
    }
